﻿//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<string.h>
//
//int main() {
//
//	//sizeof是操作符,计算操作数所占内存的⼤⼩，单位是字节,不关注内存中存放什么数据
//	//strlen是库函数，求的是字符串的长度，统计的是\0之前的字符个数，单位是字节，
//	//strlen会关注内存中是否有\0,如果没有 \0 ，就会持续往后找，可能会越界
//	
//	char arr[] = { 'a','b','c','d','e','f' };
//	printf("%zd\n", sizeof(arr));//6,这里求的是整个数组的大小
//	printf("%zd\n", sizeof(arr + 0));//这里加0使arr退化成指针，即指针运算，结果是指针，x64上指针大小为8字节
//	printf("%zd\n", sizeof(*arr));//1，数组首元素
//	printf("%zd\n", sizeof(arr[1]));//1，数组首元素
//	printf("%zd\n", sizeof(&arr));//8,指针
//	printf("%zd\n", sizeof(&arr + 1));//8,指针
//	printf("%zd\n", sizeof(&arr[0] + 1));//8,指针
//
//	printf("************************\n");
//	
//	printf("%zd\n", strlen(arr));//越界
//	printf("%zd\n", strlen(arr + 0));//越界
//	printf("%zd\n", strlen(*arr));//*arr为第一个元素a，类型为char，但是srelen参数要求为字符串指针char*，不匹配
//	printf("%zd\n", strlen(arr[1]));//同上，不匹配
//	printf("%zd\n", strlen(&arr));//&arr 是 “指向整个数组的指针”（类型 char (*)[6]），不匹配
//	printf("%zd\n", strlen(&arr + 1));//&arr + 1 指向数组后方的未知内存，strlen 越界访问
//	printf("%zd\n", strlen(&arr[0] + 1));//&arr[0] + 1是指向第二个元素的指针，还是越界
//
//	
//	return 0;
//}